home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-05
/
pdclk139.zip
/
PDCLKSET.DOC
< prev
next >
Wrap
Text File
|
1992-05-17
|
26KB
|
502 lines
;*************************************************************************
;** **
;** PDCLKSET **
;** **
;** **
;** Copyright (C) 1991 Jan.Engvald @ LDC.lu.se **
;** **
;** This program is free software; you can redistribute it and/or modify**
;** it under the terms of the GNU General Public License as published by**
;** the Free Software Foundation, version 1. **
;** **
;** This program is distributed in the hope that it will be useful, **
;** but WITHOUT ANY WARRANTY; without even the implied warranty of **
;** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
;** GNU General Public License for more details. **
;** **
;** You should have received a copy of the GNU General Public License **
;** along with this program; if not, write to the Free Software **
;** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. **
;** **
;*************************************************************************
;** USING PDCLKSET TO SET THE PC SOFTWARE CLOCK **
;*************************************************************************
;** **
;** PDCLKSET sets the time and date of the PC clock using a TIME server.**
;** To do so, the following information is required: **
;** **
;** - This clients unique IP number. **
;** - The IP number of an UDP/IP time server (most Unix systems). **
;** - The time zone offset from UTC (GMT) at this place. **
;** - If daylight saving (summer) time is used, which algorithm to use. **
;** **
;** All the above info can be supplied as arguments to PDCLKSET. If any **
;** of the first three are missing, it will send a BOOTP request to try **
;** to find the missing info. If you are not using BOOTP you probably **
;** must use gateway and mask arguments too. Except for client IP number**
;** and network mask, arguments to PDCLKSET override BOOTP info. **
;** Using a BOOTP server is highly recommended, freeware code exists **
;** for Unix systems and MSDOS PCs. **
;** **
;** BOOTP can not supply which dst algorithm to use; also, zone offset **
;** can't always be trusted. So, in practice, zone offset and dst algo- **
;** rithm (if applicable) are required arguments. On the other hand, **
;** these parameters will stay the same all around the year, no need to **
;** change the setup. **
;** **
;** If PDCLKSET finds more than one time server (sum of arguments and **
;** BOOTP fields) and the first one does not answer, it will try the **
;** other servers. The same applies for gateways. **
;** **
;** It is very hard to get accurate info on all the dst algorithms used **
;** all over the world, so the one you choose, you should test out. Use **
;** the alter argument to add or subtract time and days, and check that **
;** the dst switch occurs correctly. When using the alter argument, the **
;** date and time is displayed as usual, but the PC clock is not set. **
;** If you find any errors, mail me the correct info to my mail address **
;** below. If you want to, you can customize your own dst algorithm, **
;** see detailed info below. **
;** **
;** PDCLKSET talks to the network card via a packet driver. If you have **
;** more than one packet driver, it will use the first one (lowest **
;** packet interrupt number) unless you use the pktintno argument. **
;** Currently PDCLKSET only works with Ethernet or Ethernet simulating **
;** packet drivers. **
;** **
;** In AUTOEXEC.BAT you should first load the packet driver, then call **
;** PDCLKSET. It is very small (12 kbyte) and executes fast, so you will**
;** not notice any delay. PDCLKSET is not a TSR and does not require **
;** any CONFIG.SYS files, so no memory is wasted. Use TERMIN.COM if you **
;** want to unload the packet driver. See call syntax below. **
;** Note: If you always log into a Novell server after a boot, you **
;** don't need this program, the PC clock will be set from the server. **
;** However, if you are the supervisor, use PDCLKSET+SRVTIME to set it. **
;** **
;*************************************************************************
;** USING PDCLKSET TO SET A TIMEZONE VARIABLE **
;*************************************************************************
;** **
;** PDCLKSET can also assign the proper normal or dls timezone name to **
;** an environment variable (TZ is used by most systems). Argument **
;** "Zone= #" will assign numeric zones to TZ (like TZ=+0100). If you **
;** want anything else, use the alternative syntax, e.g. **
;** "Zone= tzone=MET,METDST" will set TZONE=MET or METDST. **
;** **
;*************************************************************************
;** USING PDCLKSET FOR NETWORK TESTING (PING) **
;*************************************************************************
;** **
;** There is also a buildt in ping client and server. If you just want **
;** to enable the server, add a "flag=1" argument and the PDCLKSET **
;** termination will be delayd and it responds to incoming pings until **
;** you hit any key. If you want to send pings, use the echo argument. **
;** When you then hit any key, it stops sending but still collects **
;** responses. It terminates when hiting a second key. When pinging, **
;** it displays real time statistics on delay and error rate (nice!). **
;** PDCLKSET sets the hardware timer to enable millisecond accurate **
;** timing; if your PC does not like this, add argument "flag=16". **
;** **
;** A typical ping call look like: **
;** **
;** pdclkset echo=ping.lu.se,30,256 **
;** **
;** The display will look like this: **
;** **
;** Calling nameserver(s)... got reply in 115 ms. **
;** **
;** Ping with packet size 30 and interval 256 ms to 130.235.128.100: **
;** **
;** ------ Packets ------ | --- Delay ms --- | Packet | Load | Time **
;** transmit receive diff | this min avg max | loss | kb/s | s **
;** 187 184 3 87 27 36 517 1.6042 % 5 41 **
;** **
;** **
;** You can use IP packet sizes from 28 to 1500. While a few network **
;** errors only show up at a certain size, the default 30 is good in **
;** most cases and does not unnecessary load links. If you use a **
;** negative size, it will sweep packet sizes from 28 up to abs(size) **
;** and unless you hit ESC at termination an error size distribution **
;** table is displayd. You can then see if packets are lost randomly or **
;** in bursts or if there is a pattern, like odd or big sizes. Sweeping **
;** is very effective for detecting queue limits in routers and bridges.**
;** The ping packet data is by default starting at 0x101 and incremented**
;** by one for each word in the packet. Using the optional data and inc **
;** fields you can fill with other values, like 0,0 or 0xffff,0 which **
;** is useful for WAN modem link tests. **
;** **
;** Packets are transmitted at a constant rate depending on interval, **
;** which can be from 0 and up to 32000. The interval unit is now 1 **
;** millisecond (Note: ver 1.33 had 55 ms units!). As a safety for **
;** accidental loading, if you wan't intervals less than 128 ms you **
;** must add a Flag=1 argument. When pinging in a wide area network **
;** environment, watch the load figure (calibrated for half duplex **
;** media such as Ethernet or LocalTalk) not to overload slow links. **
;** **
;** The destination host must run IP and you can use its IP number or **
;** its domain name. **
;** **
;** Diff is the difference between sent and received packets, and if **
;** not zero either packets are lost or are in transit. If there are **
;** network errors, watching how receive and diff increments tell you **
;** how the errors are distributed in time (temporary total blocking or **
;** just random drops) down to tenths of a second (very useful!). **
;** Blocking indicates serious errors, else it can be just high load. **
;** **
;** The delay values are useful to characterize link loads. After a **
;** while, the min value approaches the delay on an unloaded link. If **
;** the average value is significantly higher, the link is loaded. If **
;** the max value is significantly higher than the avg value, the load **
;** is bursty. The "this" field shows the current delay. **
;** **
;** Packet loss is simply 100*diff/transmit. If the host you are **
;** pinging don't drop packets (many do, a 386 with PDCLKSET doesn't), **
;** the packet loss as a symptom of network health is as follows: **
;** **
;** 0.01 % or less : your network is helthy. **
;** 0.01 % to 0.1 % : there are some minor faults but nobody will **
;** notice any delays. **
;** 0.1 % to 1 % : you will notice delays more or less often. **
;** 1 % or more : frequent delays, very annoying. **
;** **
;** The display is updated five times a second. To avoid unpleasant **
;** value flickering, when a packet is just sent, diff is temporarily **
;** one less than it should be. When a packet has arrived it is back to **
;** normal. All values (except the "this" and the load values) are **
;** accumulated or averaged during the complete time since pdclkset was **
;** last started. The time field tells you this elapsed time. **
;** **
;*************************************************************************
;** USING PDTBUILD TO GENERATE TABLES WITH ALL IP HOSTS **
;*************************************************************************
;** **
;** The PDTBUILD program, which is included in the ZIP package, looks **
;** at all ARP broadcasts and generates a table with all the IP hosts **
;** on this (sub)net. Each entry has IP number, Ethernet address and **
;** host name, the latter which it asks a name server for. Two files **
;** are generated, IPTBL.TXT and HWTBL.TXT, which are suitable as input **
;** to LANwatch or a LANalyzer or other monitors. It should preferably **
;** be run for a complete day or longer. When started, if IPTBL.TXT **
;** exists it will read it in and update with what it sees on the net. **
;** It can handle up to 4000 hosts. **
;** **
;** In the comment field, an A means authorative answer, N is non- **
;** authorative answer from nameserver. 0 means host not registered **
;** for reverse lookup (in-addr.arpa domain). - means name not found. **
;** < and = denotes Ethernet duplicates for same IP address. >, = and + **
;** denotes IP duplicates for same Ethernetaddress. **
;** **
;** You can speed up address collection by adding flag=8. This will **
;** start ARP probing, a process that cycles through all IP adresses in **
;** the (sub)net and sends an ARP request for each address. The speed **
;** is 9 ARP requests per second, slowing down to two per second when **
;** nameserver requests are needed. It is rather successful in ignoring **
;** ARP replies from proxy ARP gateways (otherwise it would table a lot **
;** of fake hosts). **
;** **
;** You can run echo (ping) in parallell with tablebuilding (and the **
;** ARP probing), although the screen display is somewhat mixed. I do **
;** it because the screen then is updated regularly and I can see it is **
;** running. **
;** **
;** The tblbuild code is a quick hack, undocumented, but works for me. **
;** **
;*************************************************************************
;** PDCLKSET (and PDTBUILD) CALL SYNTAX **
;*************************************************************************
;** **
;** (time is [- | +] [<hours>h] [<minutes>m] [<seconds>[s]] ) **
;** **
;** pdclkset (displays a usage message) or **
;** **
;** pdclkset b[ootp] (only if dst not used) or **
;** **
;** pdclkset [o[ffset]=time] **
;** **
;** [d[aylightsave]=PAC | USA | CUB | CHIL | BRZ | GBR | **
;** W_EU | M_EU | E_EU | LIBY | EGY | TURK | **
;** ISR | IRAN | PRC | ROK | AUS | TASM | **
;** NSW | LHI | NZE | **
;** FrTime,FrWeekDay,FrDayOfYear, **
;** ToTime,ToWday,ToDayOfYr,AddTime] **
;** **
;** [z[onename]= # | varible=normalname,dlsname **
;** **
;** [i[pnr]=n.n.n.n] [t[imservers]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [m[ask]=n.n.n.n g[ateways]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [p[ktintno]=hexnr] [a[lter]=days,time] [f[lags]=flagnr] **
;** **
;** [e[cho]= name | n.n.n.n [,size[,interval[,data[,inc]]]]] **
;** **
;** [n[ameservers]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** **
;** Examples: **
;** **
;** pdclkset o= -1h d=M_EU z=# (my IP nr and timeserver(s) from BOOTP)**
;** **
;** pdclkset offs=6h dst=USA zonename= tz=CST,CDT (sets TZ=CST or CDT) **
;** **
;** pdclkset o=8h d=PAC ip=123.45.6.7 ts=123.45.6.8 (BOOTP not used)**
;** **
;** pdclkset o=-9h30m t=1.2.3.4 i=2.3.4.5 g=2.3.4.1 m=255.255.255.0 **
;** **
;** pdclkset pktdrv= 0x7e echo=ping.lu.se (ping client) **
;** **
;** pdclkset flags= 1 (ping server) **
;** **
;** pdtbuild flags= 2 (LANalyzer table builder) **
;** **
;** pdtbuild flags= 2+4 (LANwatch table builder) **
;** **
;** pdtbuild flags= 2+8 (table building with probing) **
;** **
;** **
;** Part of an AUTOEXEC.BAT file may look like this: **
;** **
;** \net\wd8003e -w 0x7d 3 0x280 0xd000 (install packet driver) **
;** \net\winpkt 0x7c 0x7d (install winpkt driver) **
;** \net\pdclkset o=-1h d=M_EU z=# (set PC clock and TZ) **
;** **
;** If you don't want to keep the paket drivers in memory, add the **
;** following line: **
;** **
;** \net\termin 0x7c (remove packet drivers) **
;** **
;*************************************************************************
;** HISTORY **
;*************************************************************************
;** **
;** Ver 0.85: Beta release. **
;** **
;** Ver 1.02: First official release. **
;** Removed 386-only instructions. Numerous minor changes. **
;** Corrected the Pacific daylight algorithm. **
;** **
;** Ver 1.10: Selected release with support for one gateway. **
;** **
;** Ver 1.27: Major rewrite of the UDP/IP library to make it mostly RFC **
;** compliant. Multi gateway and multi timeserver support. **
;** Fixed hangs on argument syntax errors. **
;** Added comments and documentation to the code. **
;** Added ping server and client function. **
;** **
;** Ver 1.28: Added fragment reassembly. **
;** Added PDTBUILD application to automatically generate **
;** hardware and IP tables by watching network traffic. **
;** **
;** Ver 1.29: Added SQID (Source Quench Introduced Delay) **
;** All time compares changed to js/jns instead of jl/jge, **
;** avoiding wrong handling once every hour. **
;** **
;** Ver 1.30: Added timezone environment variable handling (SET TZ=...).**
;** Timeserver not needed to ping or build tables. **
;** **
;** Ver 1.31: Ping delays now millisecond accurate. **
;** **
;** Ver 1.32: Corrected check on illegal ping packet size. **
;** Ping display cleaned up and overhead reduced. **
;** Corrected BufAlloc error when out of buffers. **
;** **
;** Ver 1.33: Fixed PDTBUILD error when not tablebuilding. Ping **
;** enhancements: Time server not needed, added elapsed ping **
;** time field, send error messages displayed. **
;** **
;** Ver 1.34: Made a table for arg decode. Negative ping size will now **
;** sweep from 28 up to abs(size). Also odd sizes work. **
;** Added code in AdjTo16bits to avoid divide overflow. **
;** **
;** Ver 1.35: Made performance improvements. A 386SX with 16-bit WD **
;** card can now handle 2000 pkts/s short packets (send + **
;** receive) or load to 7 Mb/s (long packets). Echo interval **
;** is now in units of milliseconds (actually 0.858 ms) **
;** instead of 55 ms ticks. Added traffic load field in the **
;** display. Added several debug checks. **
;** **
;** Ver 1.36: Made documentation changes for the above new features. **
;** **
;** Ver 1.37: Added domain name resolver for ping. Corrected a bug in **
;** fragment reassembly. Changed length input to SendUdpPkt. **
;** Found bug preventing inactivity timeout for remote hosts. **
;** **
;** Ver 1.38: TblBuild redesigned to be able to detect both IP and **
;** hardware address duplicates. Corrected a bug when out of **
;** buffers trying to send unreachables. **
;** **
;** Ver 1.39: TblBuild enhanced with an active probe function to speed **
;** up address collection. **
;** **
;*************************************************************************
;** ACKNOWLEDGMENTS **
;*************************************************************************
;** **
;** The checksum routine used is a modified NCSA Telnet version. **
;** The dst algorithm was modelled after PCIP SETCLOCK (thanks Drew!), **
;** but enhanced to use parameters from a table. **
;** The dst algorithm table was derived from a comp.sources.unix 1989 **
;** posting by ado@ncifcrf.gov of localtime.c and related routines **
;** and tables, and a later update (very useful data, thanks!). **
;** The master environment is found using Pat's code. **
;** The millisecond timer is based on code from Dean Pentcheff. **
;** The DateTimeCalc routine is my own invention. **
;** The packet driver interface routines were copied from the Crynwr **
;** packet driver distribution, without which this project would not **
;** have been possible (thanks Russ!). **
;** **
;** The small UDP/IP library was written by me, and can probably be **
;** used in other small assembler applications. It is now fully RFC **
;** compliant, except for a few small cases mentioned in the code. It **
;** DOES handle IP type of service, fragment reassembly, source quench **
;** throttling, sending port and protocol unreachables, multiple **
;** default gateways, etc. **
;** **
;*************************************************************************
;** WHERE TO GET IT FROM **
;*************************************************************************
;** **
;** Current version of PDCLKSET can be obtained by anonymous FTP from **
;** ftp.lu.se:/pub/network/pdclkset/pdclkxxx.zip or from Novell server **
;** LUKUNDFS/SYS:PUB\NETWORK\PDCLKSET\PDCLKxxx.ZIP (Netware access only **
;** in Lund and around). **
;** Major releases will also be available on wsmr-simtel20.army.mil and **
;** its mirror archive sites in the msdos.lan directory. **
;** **
;* *
;* Jan Engvald, Lund University Computing Center *
;* ____________________________________________________________________ *
;* Address: Box 783 E-mail: Jan.Engvald@ldc.lu.se *
;* S-220 07 LUND Earn/Bitnet: xjeldc@seldc52 *
;* SWEDEN (Span/Hepnet: Sweden::Gemini::xjeldc) *
;* Office: Soelvegatan 18 VAXPSI: psi%2403732202020::xjeldc *
;* Telephone: +46 46 107458 (X.400: C=se; A=""; P=Sunet; O=lu; *
;* Telefax: +46 46 138225 OU=ldc; S=Engvald; G=Jan) *
;* Telex: 33533 LUNIVER S *
;* *
;*************************************************************************
; Note: If you want to assemble this code yourself, you need Turbo ASM
; (at least MASM 5.1 does not like comments on structure calls!).
; Also, some files from the Crynwr packet driver collection are needed.
;************************************************************************
;* Compile time constants *
;************************************************************************
.lfcond
PRGVERSION equ ' v1.39'
TBLBUILD equ 0
PINGCLIENT equ 1
DEBUG equ 0
MN equ 60 ; seconds in a minute
HR equ 60*MN ; seconds in an hour
SUN equ 0 ; Sunday
SAT equ 6 ; Saturday
DAT equ 0ffh ; Specific date follows
FEB2W equ 31+2*7 ; Feb 2nd week
MAR1W equ 31+28+1*7 ; Mar 1st week
MAR2W equ 31+28+2*7 ; Mar 2nd week
MAR3W equ 31+28+3*7 ; Mar 2rd week
MARLW equ 31+28+31 ; Mar last week
APR01 equ 31+28+31+1 ; Apr 1
APR03 equ 31+28+31+3 ; Apr 3
APR07 equ 31+28+31+7 ; Apr 7
APR1W equ 31+28+31+1*7 ; Apr 1st week
APR2W equ 31+28+31+2*7 ; Apr 2nd week
APR18 equ 31+28+31+18 ; Apr 18
APRNL equ 31+28+31+30-7 ; Apr next last week
APR23 equ 31+28+31+23 ; Apr 23
APR26 equ 31+28+31+26 ; Apr 26
MAY01 equ 31+28+31+30+1 ; May 1
MAY2W equ 31+28+31+30+2*7 ; May 2nd week
AUG28 equ 31+28+31+30+31+30+31+28 ; Aug 28
SEP01 equ 31+28+31+30+31+30+31+31+1 ; Sep 1
SEP12 equ 31+28+31+30+31+30+31+31+12 ; Sep 12
SEP2W equ 31+28+31+30+31+30+31+31+2*7 ; Sep 2nd week
SEP17 equ 31+28+31+30+31+30+31+31+17 ; Sep 17
SEP20 equ 31+28+31+30+31+30+31+31+20 ; Sep 20
SEP3W equ 31+28+31+30+31+30+31+31+3*7 ; Sep 3rd week
SEP30 equ 31+28+31+30+31+30+31+31+30 ; Sep 30
SEPLW equ 31+28+31+30+31+30+31+31+30 ; Sep last week
OCT01 equ 31+28+31+30+31+30+31+31+30+1 ; Oct 1
OCT2W equ 31+28+31+30+31+30+31+31+30+2*7 ; Oct 2nd week
OCT24 equ 31+28+31+30+31+30+31+31+30+24 ; Oct 18 - 24
OCT4W equ 31+28+31+30+31+30+31+31+30+4*7 ; Oct 4th week
OCT29 equ 31+28+31+30+31+30+31+31+30+29 ; Oct 23 - 29
OCTLW equ 31+28+31+30+31+30+31+31+30+31 ; Oct last week
NOV13 equ 31+28+31+30+31+30+31+31+30+31+13 ; Nov 5 - 13
AlgE struc
AlgName db "EUR " ; Name of dst algorithm
AlgFromTime dw 2*HR ; local standard time dst start
AlgFromWeekDay dw SUN ; weekday dst start
AlgFromWeek dw MARLW ; last day-of-year dst start
AlgUntilTime dw 2*HR ; local standard time dst end
AlgUntilWeekDay dw SUN ; weekday dst end
AlgUntilWeek dw SEPLW ; last day-of-year dst end
AlgAddAmount dw 1*HR ; dst advance amount
AlgEntryLen equ $-AlgName
AlgE ends
AlgData struc
AUSA AlgE <"USA ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR> ; USA Canada Mexico
ACub AlgE <"CUB ", 0*HR,SUN,MAY2W,-1*HR,SUN,OCT2W, HR> ; Cuba
AChl AlgE <"CHIL", 0*HR,SUN,OCT2W,-1*HR,SUN,MAR2W, HR> ; Chile
ABrz AlgE <"BRZ ", 2*HR,SAT,OCT4W, 1*HR,SAT,FEB2W, HR> ; Brazil
AGBR AlgE <"GBR ", 1*HR,SUN,MARLW, 1*HR,SUN,OCT29, HR> ; United Kingdom
AWEu AlgE <"W_EU", 1*HR,SUN,MARLW, 1*HR,SUN,SEPLW, HR> ; West Europe
AMEu AlgE <"M_EU", 2*HR,SUN,MARLW, 2*HR,SUN,SEPLW, HR> ; Central Europe + SU
AEEu AlgE <"E_EU", 3*HR,SUN,MARLW, 3*HR,SUN,SEPLW, HR> ; East Europe
ALby AlgE <"LIBY", 2*HR,DAT,APR01, 1*HR,DAT,SEP30, HR> ; Libya
AEgy AlgE <"EGY ", 2*HR,DAT,MAY01, 1*HR,DAT,OCT01, HR> ; Egypt
ATur AlgE <"TURK", 1*HR,SUN,MARLW, 0*HR,SUN,SEPLW, HR> ; Turkey
AIra AlgE <"IRAN", 2*HR,SUN,MARLW, 1*HR,SUN,SEP3W, HR> ; Iran
APRC AlgE <"PRC ", 2*HR,SUN,APR2W, 2*HR,SUN,SEP2W, HR> ; People Rep of China
AROK AlgE <"ROK ", 2*HR,SUN,MAY2W, 2*HR,SUN,OCT2W, HR> ; Rep of Korea
AAus AlgE <"AUS ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR3W, HR> ; South Australia
ATas AlgE <"TASM", 2*HR,SUN,OCT24, 2*HR,SUN,MAR3W, HR> ; Tasmania
ANSW AlgE <"NSW ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR1W, HR> ; New South Wales
ALHI AlgE <"LHI ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR1W, 30*MN> ; LHI (Australia)
ANZe AlgE <"NZE ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR1W, HR> ; New Zealand
; All entries below this line are indexed by year modulo 4
APa0 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,NOV13, HR> ; Pacific presidential
APa1 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR> ; Pacific non-pres
APa2 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR> ; Pacific non-pres
APa3 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR> ; Pacific non-pres
; All entries above this line are cyclic and will last forever
; All entries below this line are non-cyclic, they only last 4 years
AIs0 AlgE <"ISR ", 0*HR,DAT,APR26,-1*HR,DAT,SEP20, HR> ; Israel 1992
AIs1 AlgE <"ISR ", 0*HR,DAT,APR18,-1*HR,DAT,SEP12, HR> ; Israel 1993
AIs2 AlgE <"ISR ", 0*HR,DAT,APR03,-1*HR,DAT,AUG28, HR> ; Israel 1994
AIs3 AlgE <"ISR ", 0*HR,DAT,APR23,-1*HR,DAT,SEP17, HR> ; Israel 1995
if 0 ; as years go by, replace entries above from below with same label
AIs0 AlgE <"ISR ", 0*HR,DAT,APR14,-1*HR,DAT,SEP08, HR> ; Israel 1996
AIs1 AlgE <"ISR ", 0*HR,DAT,MAY04,-1*HR,DAT,SEP28, HR> ; Israel 1997
AIs2 AlgE <"ISR ", 0*HR,DAT,APR19,-1*HR,DAT,SEP13, HR> ; Israel 1998
AIs3 AlgE <"ISR ", 0*HR,DAT,APR11,-1*HR,DAT,SEP05, HR> ; Israel 1999
AIs0 AlgE <"ISR ", 0*HR,DAT,APR30,-1*HR,DAT,SEP24, HR> ; Israel 2000
AIs1 AlgE <"ISR ", 0*HR,DAT,APR15,-1*HR,DAT,SEP09, HR> ; Israel 2001
AIs2 AlgE <"ISR ", 0*HR,DAT,APR07,-1*HR,DAT,SEP01, HR> ; Israel 2002
AIs3 AlgE <"ISR ", 0*HR,DAT,APR27,-1*HR,DAT,SEP21, HR> ; Israel 2003
AIs0 AlgE <"ISR ", 0*HR,DAT,APR18,-1*HR,DAT,SEP12, HR> ; Israel 2004
AIs1 AlgE <"ISR ", 0*HR,DAT,MAY01,-1*HR,DAT,SEP25, HR> ; Israel 2005
AIs2 AlgE <"ISR ", 0*HR,DAT,APR23,-1*HR,DAT,SEP17, HR> ; Israel 2006
AIs3 AlgE <"ISR ", 0*HR,DAT,APR15,-1*HR,DAT,SEP09, HR> ; Israel 2007
AIs0 AlgE <"ISR ", 0*HR,DAT,APR27,-1*HR,DAT,SEP21, HR> ; Israel 2008
AIs1 AlgE <"ISR ", 0*HR,DAT,APR19,-1*HR,DAT,SEP13, HR> ; Israel 2009
endif
AlgData ends
WARNYEAR equ 1996 ; acyclic data invalid year
;************************************************************************